package program;

import java.util.ArrayList;

/**
 *
 * @author David Coronado
 */
public class MyStack {

    ArrayList<Automovil> stack;
    Object temp;

    public MyStack() {
        stack = new ArrayList();
    }

    /**
     * Metodo para "des estacionar" un automovil
     * @param index : lugar donde se encuentra el carro
     * @return temp : el objeto automovil
     */
    public Object pop(int index) throws EmptyStackException, NoSuchParkingSpotException {
        if (stack.isEmpty()) {
            throw new EmptyStackException("El parqueo esta vacio...");
        }
        if (index > 10 || index < 1) {
            throw new NoSuchParkingSpotException("No existe tal parqueo...");
        }
        temp = stack.get(index - 1);
        stack.remove(index - 1);
        return temp;

    }

    /**
     * Metodo para estacionar un automovil
     * Ingresa un objeto al stack del parqueo
     * @param carro
     * @throws program.FullStackException
     */
    public void push(Automovil carro) throws FullStackException {
        if (stack.size() == 10) {
            throw new FullStackException("El parqueo esta lleno, no se pueden ingresar mas carros...");
        } else {
            stack.add(carro);
        }
    }

    /**
     * Metodo para verificar el automovil parqueado en alguna casilla
     * Nos muestra el elemento en el lugar indicado
     * @param index
     * @return automovil
     * @throws program.EmptyStackException
     * @throws program.NoSuchParkingSpotException
     */
    public Automovil peek(int index) throws EmptyStackException, NoSuchParkingSpotException {
        if (stack.isEmpty()) {
            throw new EmptyStackException("El parqueo esta vacio...");
        }
        if (index > 10 || index < 1) {
            throw new NoSuchParkingSpotException("No existe tal parqueo...");
        }
        return stack.get(index - 1);
    }

    /**
     * Metodo para saber si el estacionamiento (stack) esta lleno
     * @return isFull??
     */
    public boolean isFull() {
        if (stack.size() == 10) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * Cuantos elementos estan en el estacionamiento (Stack)
     * @return alementos
     */
    public int Spot() {
        return stack.size();
    }

    /**
     * 
     * @return una representacion del stack o estacionamiento
     */
    @Override
    public String toString() {
        String lot = "";
        int cont=0;
        try {
            for (int i = 0; i < 10; i++) {
                System.out.println("Parqueo " + (i+1) + ": " + stack.get(i).getPlaca());
                cont++;
            }
        } catch (Exception e) {
            for(int k=cont+1 ; k<=10 ; k++){
                System.out.println("Parqueo " + k + ": vacio");
            }
        }
        return lot;
    }
}
